#pragma once

#include "GameObject.h"
#include "Transformation.h"
#include "Size.h"

namespace game_engine { namespace gui
{

/*!
 * \class Widget
 * \brief 
 */
class Widget : public game_engine::GameObject
{
///////////////////////////////////////////////////////////////////////////////
// Attribute definition
///////////////////////////////////////////////////////////////////////////////
protected:
    components::Transformation *_transformation;

private:
    BOOL _enabled;
    BOOL _focus;
    FLOAT32 _height;
    utils::Size _size;
    BOOL _visible;
    FLOAT32 _width;

///////////////////////////////////////////////////////////////////////////////
// Method definition
///////////////////////////////////////////////////////////////////////////////
public:
    // Constructors and Destructors
    Widget(void);
    Widget(Scene *scene, const string &name, const string &tag, const DrawLevelType drawLevel);
    virtual ~Widget(void);

    // Others
    const BOOL isMouseOver(const utils::Point &position) const;

    // Getters
    const BOOL hasFocus(void) const;
    const FLOAT32 height(void) const;
    const BOOL isEnabled(void) const;
    const BOOL isVisible(void) const;
    const utils::Point position(void) const;
    const utils::Size& size(void) const;
    const FLOAT32 width(void) const;

    // Setters
    virtual void setEnabled(const BOOL enabled);
    virtual void setFocus(const BOOL focus);
    void setHeight(const FLOAT32 height);
    void setPosition(const utils::Point &position);
    void setSize(const utils::Size &size);
    void setVisible(const BOOL visible);
    void setWidth(const FLOAT32 width);

};

}}
